package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.CheckItem;
import com.itheima.pojo.Menu;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 角色持久层接口
 */
public interface RoleDao {

    /**
     * 根据用户id关联查询角色集合
     * @param userId
     * @return
     */
    public Set<Role> findRolesByUserId(Integer userId);


    //角色管理  分页查询
    Page<CheckItem> selectByCondition(String queryString);

    //角色管理  模糊查询
    //根据角色名称模糊查询
    Page<CheckItem> query1(String queryString);
    //根据角色关键字模糊查询
    Page<CheckItem> query2(String queryString);

    //角色管理  新增角色
    void add(Role role);

    //回显角色数据
    Role findById(Integer groupId);

    //编辑角色
    void edit(Role role);

    //删除角色
    void deleteById(Integer id);

    //发送请求获取页面回显参数  权限
    List<Permission> QueryAuthority();

    //发送请求获取页面回显参数  菜单
    List<Menu> InquiryMenu();

    //回显权限选择项数据
    List<Integer> jurisdictionIds(Integer jurisdictionId);

    //回显菜单选择项数据
    List<Integer> menuIds(Integer menuId);

    //分配权限与菜单   权限
    void jurisdictionId(Map map);

    //分配权限与菜单   菜单
    void menuId(Map map);

    //添加前删除所以避免重复  权限
    void sbid1(Integer id);

    //添加前删除所以避免重复  菜单
    void sbid2(Integer id);

    //校验是否有关联
    Integer check1(Integer id);//校验权限
    Integer check2(Integer id);//校验菜单

    /**
     * 根据roleId查询所用的user的id
     */
    List<Integer> findUserIdsByRoleId(Integer roleId);

    /**
     * 是否于用户关联
     * @param rId
     * @return
     */
    int checkUser(Integer rId);

    /**
     * 用就删除掉
     */
    void deleteRoleUserByRid(Integer rId);

    /**
     * 添加关联
     * @param rId
     * @param userId
     */
    void addRoleUser(@Param("rId") Integer rId, @Param("userId")Integer userId);
}
